<?php


namespace app\web\controller;


use app\api\controller\v2\Auth;
use app\common\cachemodel\zl2\Zl2UserSurpriseRecord;
use think\Controller;
use think\Env;
use think\Exception;
use think\Log;

class MentalTestZhunle extends Controller
{
    /**
     * log日志前缀
     * @var string
     */
    private static $LOG_PRE = '准了的心理测试(MentalTestZhunle Controller-index)-';

    /**
     * 环境变量，dev、beta、online
     * @var string
     */
    protected $env = '';

    /**
     * 静态资源地址
     * @var string
     */
    protected $oss = '';

    /**
     * 请求域名
     * @var string
     */
    protected $host = '';

    public function _initialize(): void
    {
        $this->env = Env::get('host.name');
        $this->oss = Env::get('host.photo');
        $this->host = Env::get('host.domain');
    }

    /**
     * 题目回答页面
     */
    public function index()
    {
        // 上线必须修改成false，关闭测试模式，测试模式为实时计算，页面无权限验证
        $isTest = false;

        //请求参数
        $height = input('h/d', 0);//导航栏高度

        //逻辑输入参数
        $id = input('id/d', 0);//惊喜id
        $type = input('type/d', 0);//类型【0：答题页面；1：提交答题；2：答题结果】
        $option = input('option/s', '');//提交的答案，当 type=1是有效


        //终端类型（android/ios）
        $appType = $this->request->header('app-type');

        //是否展示js日志
        $is_show_log = 1;
        if ($this->env === 'online')
        {
            $is_show_log = 0;
        }


        //正常、异常 页面通用数据
        $common_data = [
            'appType' => $appType,//app类型【android/ios】
            'height' => $height,//导航栏高度
            'is_show_log' => $is_show_log,//是否展示js日志
        ];


        //自定义变量
        $err_msg = '';//异常信息，为空不提示


        //参数校验
        if (0 === $id)
        {
            $err_msg = 'id不能为空(' . $id . ')！';
        } else if (!in_array($type, [0, 1, 2]))
        {
            $err_msg = 'type异常(' . $type . ')！';
        } else if (1 === $type && $option === '')
        {
            $err_msg = '选项异常(' . $type . ')！';
        }

        if (!empty($err_msg))
        {//当异常消息不为空的时候，那么跳转到错误页面
            Log::write(self::$LOG_PRE . '参数校验失败：' . $err_msg, 'error', true);
            return $this->fetchErr('index', $common_data, $err_msg);
        }

        //校验token
        try
        {
            if (!$isTest)
            {//正式上线后
                $auth = new Auth();
                $auth->checkRequestAuth();
                $userInfo = $auth->user;
                $uid = $userInfo ? (int)$userInfo['id'] : 0;
            } else
            {//测试情况
                $uid = 12345883;//mark173
            }
        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_PRE . '权限认证失败：line=' . $e->getLine() . ',msg=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            $err_msg = '请求异常,请稍后重试！';
            return $this->fetchErr('index', $common_data, $err_msg);
        }

        //获取用户失败，返回前端页面-error
        if (0 === $uid)
        {
            Log::write(self::$LOG_PRE . '获取用户的uid失败：uid=0', 'error', true);
            $err_msg = '获取用户的id失败，请稍后重试！';
            return $this->fetchErr('index', $common_data, $err_msg);
        }

        try
        {
            //根据id 获取 答题数据
            $userSurpriseRecord = new Zl2UserSurpriseRecord();
            $data_record = $userSurpriseRecord->getMentalTestDataBySurprise($uid, $id);

            //数据获取失败，返回前端页面-error
            if (!$data_record['status'])
            {
                Log::write(self::$LOG_PRE . 'getMentalTestDataBySurprise：' . $data_record['msg'], 'error', true);
                $err_msg = $data_record['msg'];
                return $this->fetchErr('index', $common_data, $err_msg);
            }

            //是否 已答题【0未答题，1已答题】
            if (0 === $data_record['data']['status'] && $type !== 1)
            {//答题页面

//                //题目假数据
//                $data = [
//                    'status' => 0,//答题页面
//                    'title' => '关于你个人想法和形式风格的客观描述，请根据自己的实际情况选择最符合自己的选项。',
//                    'options' =>
//                        [
//                            [
//                                'option' => 'A',
//                                'name' => '同意'
//                            ],
//                            [
//                                'option' => 'B',
//                                'name' => '不同意'
//                            ],
//                            [
//                                'option' => 'C',
//                                'name' => '完全同意'
//                            ],
//                            [
//                                'option' => 'D',
//                                'name' => '完全同意完全同意完全同意完全同意完全同意完全同意完全同意完全同意完全同意'
//                            ],
//                        ],
//                    'url_submit' => $this->host . '/web/mental_test_zhunle/index?zhunle_not_show_nav=1&need_auth=2&type=1&id=' . $id . '&option='
//                ];

                $data = $data_record['data'];
                $data['url_submit'] = $this->host . '/web/mental_test_zhunle/index?zhunle_not_show_nav=1&need_auth=2&type=1&id=' . $id . '&option=';

            } else
            {//提交答题 或者 答题结果页面
                if (1 === $type && 0 === $data_record['data']['status'])
                {
                    //提交答案
                    $data_submit = $userSurpriseRecord->mentalTestSubmit($uid, $id, $option);
                    if (!$data_submit['status'])
                    {
                        Log::write(self::$LOG_PRE . 'mentalTestSubmit（提交答案异常）：' . $data_record['msg'], 'error', true);
                        $err_msg = $data_record['msg'];
                        return $this->fetchErr('index', $common_data, $err_msg);
                    } else
                    {
                        $data = $data_submit['data'];
                    }
                } else
                {//答题结果页面
                    $data = $data_record['data'];
                }
                //结果假数据
//                $data = [
//                    'status' => 1,
//                    'title' => '关于你个人想法和形式风格的客观描述，请根据自己的实际情况选择最符合自己的选项。',
//                    'answer' => [
//                        'option' => 'C',
//                        'name' => '完全不同意',
//                        'content' => '这里是结果文案显示关于你个人想法和形式风格的客观描述，请根据自己的实际情况选择最符合自己的选项。关于你个人想法和形式风格的客观描述，请根据自己的实际情况选择最符合自己的选项。关于你个人想法和形式风格的客观描述，请根据自己的实际情况选择最符合自己的选项。'
//                    ],
//                ];
            }

            //页面数据
            return $this->fetch('index', array_merge($common_data, ['error_msg' => $err_msg], ['data' => $data]));

        }
        catch (\Exception $e)
        {
            Log::write(self::$LOG_PRE . '逻辑处理失败：line=' . $e->getLine() . ',message=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            $err_msg = '请求异常,请稍后重试！';
            return $this->fetchErr('index', $common_data, $err_msg);
        }
    }

    /**
     * 异常，传递到页面的数据
     * @param string $template
     * @param $common_data
     * @param $err_msg
     * @return mixed
     */
    private function fetchErr(string $template, $common_data, $err_msg)
    {
        return $this->fetch($template, array_merge($common_data, ['error_msg' => $err_msg, 'sensor_data' => [], 'data' => []]));
    }

}
